function modelFolderName = getModelList()
%GETMODELLIST 获取项目中的Simulink模型列表
%   此函数扫描项目设计目录，返回所有有效的Simulink模型文件夹名称列表。
%   只返回包含对应.slx文件的文件夹，排除通用文件夹和示例模型。
%
%语法:
%   modelFolderName = getModelList()
%
%输入参数:
%   无
%
%输出参数:
%   modelFolderName - 字符串元胞数组，包含所有有效模型的文件夹名称
%                     如果没有找到模型，返回空数组
%
%说明:
%   - 使用ProjectPathManager.getDirPath获取设计根目录路径
%   - 遍历设计目录下的所有子文件夹
%   - 排除以下文件夹：包含'.'的文件夹、'common'文件夹、'sample_model'文件夹
%   - 只有当文件夹名称对应的.slx文件存在时，才将其加入列表
%   - 假设模型名称与文件夹名称相同
%
%示例:
%   % 获取所有模型列表
%   models = getModelList();
%   if ~isempty(models)
%       fprintf('找到 %d 个模型:\n', length(models));
%       for i = 1:length(models)
%           fprintf('  %s\n', models{i});
%       end
%   else
%       fprintf('未找到任何模型\n');
%   end
%
%依赖项:
%   ProjectPathManager.getDirPath - 获取项目目录路径
%   which - 查找文件完整路径
%
%参见:
%   ProjectPathManager, which, dir
%

%版本: 1.0
%日期: 2024
%


modelFolderName = [];
designDir = ProjectPathManager.getDirPath('design root');
designDirFolder = dir(designDir);
j = 0;
for i = 1 : numel(designDirFolder)
    if designDirFolder(i).isdir
        folderName = designDirFolder(i).name;
        if ~contains(folderName,'.') && ...
                ~strcmpi(folderName,'common') &&...
                ~isempty(folderName) &&...
                ~strcmpi(folderName,'sample_model')
            % assume model name == folder name
            modelFullPath = which(folderName);
            if ~isempty(modelFullPath) 
                [~,~,ext] = fileparts(modelFullPath);
                if strcmp(ext,'.slx')
                    j = j+1;
                    modelFolderName{j} = folderName;
                end
            end
        end
    end
end

end